/**
 * N盘菜，每盘有一个ai和一个bi
 * 可以对N盘任意排序，然后从左到右吃
 * 当累积ai超过X或者bi超过Y，则停止
 * 问能吃到的最少盘是多少
 * 
 * 贪心，先将ai从大到小排，然后看多少超过
 * 再将bi从大到小排，看多少超过
 * 二者之一必有答案
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;


using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pll = pair<llt, llt>;

llt const INF = 0x7F1F2F3F4F5F6F7F;

int N;
int M;

llt X, Y;
vll A, B;

int proc(llt target, vll & vec){
    sort(vec.begin(), vec.end(), greater<llt>());
    vll s(N);
    s[0] = vec[0];
    for(int i=1;i<N;++i) s[i] = s[i - 1] + vec[i];
    auto pp = equal_range(s.begin(), s.end(), target);
    return pp.second - s.begin();

}

void work(){ 
    cin >> N >> X >> Y;
    A.assign(N, {});
    B.assign(N, {});
    for(auto & i : A) cin >> i;
    for(auto & i : B) cin >> i;

    int tmp = proc(X, A);
    int t2 = proc(Y, B);
    int ans = min(tmp, t2);
    if(ans != N) ans += 1;
    cout << ans << endl;
	return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}